package businessLogic.service;

import dao.MateriaDAO;
import entity.DiaDeClase;
import entity.Grupo;
import entity.Materia;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import vo.DiaDeClaseVO;
import vo.GrupoVO;
import vo.IValueObject;
import vo.MateriaVO;

/**
 *
 * @author Alexander
 */
public class MateriaService implements IService{

    @Override
    public void persist(IValueObject vo, EntityManager em) {
        Materia entity = new Materia();
        entity.setCodigo(((MateriaVO)vo).getCodigo());
        entity.setNombre(((MateriaVO)vo).getNombre());
        entity.setCreditos(((MateriaVO)vo).getCreditos());
        
        List<Grupo> grupos = new ArrayList<>();
               
        for(GrupoVO grupoVO : ((MateriaVO)vo).getGrupos()){
            List<DiaDeClase> dias = new ArrayList<>();
            for (DiaDeClaseVO diaVO : grupoVO.getDiasDeClase()){
                DiaDeClase dia = new DiaDeClase();
                dia.setDia(diaVO.getDia());
                dia.setHora(diaVO.getHora());
                dia.setDuracion(diaVO.getDuracion());
                dia.setSalon(diaVO.getSalon());
                dias.add(dia);
            }
            Grupo grupo = new Grupo();
            grupo.setId(grupoVO.getId());
            grupo.setNumeroGrupo(grupoVO.getNumeroGrupo());
            grupo.setDiasDeClase(dias);
            grupo.setMateria(entity);
            for(DiaDeClase dia : grupo.getDiasDeClase()){
                dia.setGrupo(grupo);
            }
            grupos.add(grupo);
        }
        entity.setGrupos(grupos);
        
        //entity.setGrupos(((MateriaVO)vo).getGrupos());
        
        new MateriaDAO().persist(entity, em);
    }

    @Override
    public IValueObject find(Object id, EntityManager em) {
        return new MateriaDAO().find(id, em);
    }

    @Override
    public void update(IValueObject vo, EntityManager em) {
        Materia entity = new Materia();
        entity.setCodigo(((Materia)vo).getCodigo());
        entity.setNombre(((Materia)vo).getNombre());
        entity.setGrupos(((Materia)vo).getGrupos());
        
        new MateriaDAO().update(entity, em);
    }

    @Override
    public void delete(Object id, EntityManager em) {
        new MateriaDAO().delete(id, em);
    }
    
    public List<MateriaVO> search(Object guess, boolean byCode, EntityManager em){
        return new MateriaDAO().search(guess, byCode, em);
    }

    @Override
    public List<IValueObject> getList(EntityManager em) {
        return new MateriaDAO().getList(em);
    }
    
}
